home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung / Power-Programmierung CD 2 (Tewi)(1994).iso / doc / mir / lines.c < prev    next >
Text File  |  1992-07-02  |  5KB  |  164 lines

  1. /*
  2.  *  usage:  lines  file_name[s]
  3.  *
  4.  * LINES    Provides a quick count of the number of lines in each of one
  5.  *          or more files.
  6.  *
  7.  *  input:  Any file[s], but most useful if ASCII text.
  8.  *
  9.  *  output: A one line report on the screen of the number of lines in
  10.  *          each input file.
  11.  *
  12.  *  writeup: MIR TUTORIAL ONE, topic 6
  13.  *
  14.  *  written:    Douglas Lowry   Mar 07 92
  15.  *              Copyright (C) 1992 Marpex Inc.
  16.  *
  17.  *    The MIR (Mass Indexing and Retrieval) Tutorials explain detailed
  18.  *    usage and co-ordination of the MIR family of programs to analyze,
  19.  *    prepare and index databases (small through gigabyte size), and
  20.  *    how to build integrated retrieval software around the MIR search
  21.  *    engine.  The fifth of the five MIR tutorial series explains how
  22.  *    to extend indexing capability into leading edge search-related
  23.  *    technologies.  For more information, GO IBMPRO on CompuServe;
  24.  *    MIR files are in the DBMS library.  The same files are on the
  25.  *    Canada Remote Systems BBS.  A diskette copy of the Introduction
  26.  *    is available by mail ($10 US... check, Visa or Mastercard);
  27.  *    diskettes with Introduction, Tutorial ONE software and the
  28.  *    shareware Tutorial ONE text cost $29.  Shareware registration
  29.  *    for a tutorial is also $29.
  30.  *
  31.  *    E-mail...
  32.  *                Compuserve  71431,1337
  33.  *                Internet    doug.lowry%canrem.com
  34.  *                UUCP        canrem!doug.lowry
  35.  *                Others:     doug.lowry@canrem.uucp
  36.  *
  37.  *    FAX...                  416 963-5677
  38.  *
  39.  *    "Snail mail"...         Douglas Lowry, Ph.D.
  40.  *                            Marpex Inc.
  41.  *                            5334 Yonge Street, #1102
  42.  *                            North York, Ontario
  43.  *                            Canada  M2N 6M2
  44.  *
  45.  *    Related database consultation and preparation services are
  46.  *    available through:
  47.  *              Innotech Inc., 2001 Sheppard Avenue E., Suite #118,
  48.  *              North York, Ontario  Canada   M2J 4Z7
  49.  *              Tel.  416 492-3838   FAX  416 492-3843
  50.  *
  51.  *  This program is free software; you may redistribute it and/or
  52.  *  modify it under the terms of the GNU General Public License as
  53.  *  published by the Free Software Foundation; either version 2 of
  54.  *  the License, or (at your option) any later version.
  55.  *
  56.  *  This program is distributed in the hope that it will be useful,
  57.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  58.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  59.  *  GNU General Public License for more details.
  60.  *
  61.  *  You should have received a copy of the GNU General Public License
  62.  *  (file 05LICENS) along with this program; if not, write to the
  63.  *  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
  64.  *  USA.
  65.  */
  66.  
  67. #include <stdio.h>
  68. #include <fcntl.h>
  69. #include <sys\types.h>
  70. #include <sys\stat.h>
  71. #include <io.h>
  72.  
  73. #define  repeat  for(;;)
  74.  
  75. typedef     enum bool
  76.     { FALSE = 0, TRUE = 1 }  Bool ;
  77.  
  78. #define     INTAKE      2048    /*  # of bytes in input buffer  */
  79.  
  80.     void    process(), Usage_();
  81.     char    *Cmdname_()     { return( "lines" ) ; }
  82.  
  83. /*
  84.  *  MAIN -
  85.  */
  86.  
  87. main( argc, argv )
  88.     int     argc;
  89.     char    **argv;
  90. {
  91.     char    c10 ;
  92.     int     fd,              /* file descriptor              */
  93.             file;
  94.     long int     line_ct, /* accumulator within file    */
  95.             grand_total ;
  96.  
  97.     c10 = argv[1][0] ;
  98.     if( argc == 1 || c10 == '-' || c10 == '/' || c10 == '?' )
  99.         Usage_();
  100.  
  101.     grand_total = 0 ;
  102.  
  103.     for( file = 1 ; file < argc ; file++ )
  104.     {
  105.         if(( fd = open( argv[ file ], O_RDONLY | O_BINARY )) == -1 )
  106.         {
  107.             fprintf( stderr, "Can't open file %s\n", argv[ file ] );
  108.             continue;
  109.         }
  110.  
  111.         process( fd, &line_ct );
  112.  
  113.         printf( "\n%7ld lines in file %s\n", line_ct, argv[file] ) ;
  114.         grand_total += line_ct ;
  115.  
  116.         if( close( fd ))
  117.             fprintf( stderr, "Problem closing %s\n", argv[ file ] );
  118.     }
  119.  
  120.     printf( "\n%7ld lines TOTAL\n", grand_total ) ;
  121.  
  122.     exit( 0 );
  123. }
  124.     void
  125. Usage_()
  126. {
  127.     fprintf( stderr, "\nusage:  %s  file_name[s]\n\n\
  128.         Provides a quick count of the number of lines in each of one\n\
  129.         or more files.\n\n\
  130. input:  Any file[s], but most useful if ASCII text.\n\n\
  131. output: A one line report on the screen of the number of lines in\n\
  132.         each input file.\n\n",  Cmdname_() );
  133.     fprintf( stderr, "writeup: MIR TUTORIAL ONE, topic 6\n\n" ) ;
  134.  
  135.     exit( 1 ) ;
  136. }
  137. /*
  138.  *  PROCESS
  139.  */
  140.     void
  141. process( fd, cum )
  142.     int fd;                  /*  file descriptor     */
  143.     long int    *cum;   /*  count of line feeds   */
  144. {
  145.     unsigned char   buf_in[ INTAKE ];
  146.     register int    buf_len,
  147.             i;
  148.     *cum = 0;
  149.  
  150.     repeat
  151.     {
  152.         if ( ( buf_len = read( fd, buf_in, INTAKE ) ) == 0 )
  153.             break;
  154.  
  155.         for ( i= 0 ; i < buf_len ; i++ )
  156.         {
  157.             if( buf_in[ i ] == '\n' )
  158.                 *cum += 1 ;
  159.         }
  160.     }
  161.  
  162.     return;
  163. }
  164.